#ifndef CAMERASDKINTERFACE_H
#define CAMERASDKINTERFACE_H

#include "SDKInterface.h"
#include <QSize>
#include <functional>
#include <QImage>
#include <QWidget>
#include <QDialog>


// 前向声明ImageCallback类型，与VisiyunDevice.h中的定义保持一致
typedef std::function<void(const QString&, const QImage&, int)> ImageCallback;

class CameraSDKInterface : public SDKInterface
{
    Q_OBJECT
public:
    explicit CameraSDKInterface(QObject *parent = nullptr):SDKInterface(parent)
    {
        m_DeviceType=DeviceType::Camera;
    }
    virtual ~CameraSDKInterface() = default;

    /**
     * @brief 获取设备固件版本
     * @param deviceId 设备ID
     * @return 固件版本，失败返回-1
     */
    virtual int getDeviceFirmwareVersion(const QVariant& deviceId) = 0;

    /**
     * @brief 获取设备像素尺寸
     * @param deviceId 设备ID
     * @return QSize对象(宽x高)，失败返回空尺寸
     */
    virtual QSize getDevicePixelSize(const QVariant& deviceId) = 0;

    /**
     * @brief 设置图像采集回调函数
     * @param deviceId 设备ID
     * @param callback 回调函数指针
     */
    virtual void setImageCaptureCallback(const QVariant& deviceId, ImageCallback callback) = 0;

    /**
     * @brief 取消图像采集回调函数
     * @param deviceId 设备ID
     */
    virtual void unsetImageCaptureCallback(const QVariant& deviceId) = 0;

    /**
     * @brief 获取快速参数设置Widget
     * @param deviceId 设备ID
     * @param parent 父窗口指针
     * @return 快速参数设置Widget指针，失败返回nullptr
     */
    virtual QWidget* getQuickParametersWidget(const QVariant& deviceId, QWidget* parent = nullptr) = 0;

    /**
     * @brief 获取参数设置对话框
     * @param deviceId 设备ID
     * @param parent 父窗口指针
     * @return 参数设置对话框指针，失败返回nullptr
     */
    virtual QDialog* getParametersDialog(const QVariant& deviceId, QWidget* parent = nullptr) = 0;

};

#endif // CAMERASDKINTERFACE_H
